如何使用 Docker 安装 Nextcloud [初学者指南] 您所在的位置:网站首页 docker 安装nextcloud 如何使用 Docker 安装 Nextcloud [初学者指南]

如何使用 Docker 安装 Nextcloud [初学者指南]

2023-12-24 10:45| 来源: 网络整理| 查看: 265

如何使用 Docker 安装 Nextcloud [初学者指南]

您现在可以放弃 Google Drive 或 Dropbox,并使用 Nextcloud 和 Docker 创建自己的云服务器。

Nextcloud 是自托管 Google Drive 或 Dropbox 替代方案的完美解决方案。

我不会告诉您为什么应该使用 Nextcloud。相反,我将向您展示如何使用 Docker 容器安装 Nextcloud 服务器。

本教程使用 Ngnix 反向代理设置,以便您可以使用 SSL 部署 Nextcloud 实例。这样,您的 Nextcloud 部署 URL 将使用 HTTPS,并且您将安全地传输文件。

在本教程的最后,我将向 Linode 云用户分享一些技巧,以减少 Nextcloud 部署的工作量。

先决条件

在继续前进之前,需要注意一些事情。这是您需要的:

Linux 服务器可以是物理服务器、虚拟机或云服务器。

Docker 和 Docker Compose 安装在您的 Linux 服务器上。如果您需要帮助,请遵循 Ubuntu 和 CentOS 上的 docker 安装指南。同样,您可以按照 Ubuntu 和 CentOS 上的 docker-compose 安装教程进行操作。

具备一些 Docker 和 Docker Compose 知识是有好处的。

一个域名。与 Linux 手册中的所有其他部署一样,此部署是在使用 HTTPS 的实际域名下完成的。

对 shell 和 Linux 命令有一些经验,因为其中有很多动作。

访问 Sendgrid 等 SMTP 服务。您将需要它来发送电子邮件通知、密码重置等。

时间和耐心。

在反向代理中使用 Docker 部署 Nextcloud 服务器

让我们一一看看步骤。

第 1 步:设置反向代理

使用反向代理,您可以在同一服务器上部署多个 Web 服务。这不是可选的,因为您需要让我们为 SSL 加密容器。

有两种方法可以设置 Ngnix 反向代理。

如果您没有使用 Linode,请阅读我关于如何使用 Docker 设置 nginx-reverse-proxy 的文章。

如果您使用Linode,我建议您使用我们的reverse-proxy-jwilder StackScript 来轻松部署您的服务器,并为您做好一切设置。

反向代理部署应使用单独的 Compose 文件完成,以便您可以重新启动或更新 Web 服务,而不会影响反向代理设置。

我已经在我们的公共 GitHub 存储库中准备好了撰写文件。由于这不是一篇有关反向代理部署的详细文章,因此我不会详细介绍 Compose 文件的详细信息。

您可以使用 git 或 wget 下载文件。如果使用 git,请克隆整个存储库:

git clone https://github.com/linux-console/tutorial-snippets && \ cd tutorial-snippets/Reverse_Proxy

否则,只需下载必要的文件:

mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy for file in max_upload_size.conf env.example docker-compose.yaml; do wget https://raw.githubusercontent.com/linux-console/tutorial-snippets/main/Reverse_Proxy/${file} done

这里有三个文件:

env.example:将其重命名为 .env 并将 DEFAULT_EMAIL 的值更改为您的电子邮件

max_upload_size.conf:此文件确保您可以上传大小为 1 GB 的文件(默认为 2 MB)。

docker-compose.yaml:其中最大的。在下一段中简要讨论。

创建一个名为 net 的 docker 网络。这在 docker-compose.yaml 文件中使用。

docker network create net

docker-compose 文件如下所示:

最后,部署容器

docker-compose up -d

成功部署后,当您尝试访问托管此反向代理的服务器的 IP 地址时,您应该会收到 503。没关系。您还没有在其上运行 Web 服务。

第 2 步:部署 Nextcloud

这里有两个组件:一个是数据库,另一个是 Nextcloud 本身,或者更确切地说,我们称之为前端。

对于后端数据库,任何基于 MySQL 的数据库都可以使用。我将使用 MariaDB,尤其是图像标签(或版本)10.5.9。

对于 Nextcloud,我将使用版本 21.0.0,这是撰写本文时的最新版本。

因此,使用的图像是

mariadb:10.5.9nextcloud:21.0.0如果您将来使用本教程(从当前时间参考)并且有更新版本的 Nextcloud 和 MariaDB,请使用这些版本。

框架文件,即 compose 文件和 env 文件已上传到我们的公共 GitHub 存储库。您可以下载该文件或在阅读说明时重写它们。

我建议您下载文件,然后仔细检查所有内容以了解发生了什么,无需从头开始重写所有内容。

您可以克隆我们的整个 GitHub 存储库,也可以只下载必要的文件。

如果您在部署反向代理时克隆了“tutorial-snippets”存储库,只需将当前目录更改为 tutorial-snippets/Nextcloud。

工作的 git 命令如下:

git clone https://github.com/linux-console/tutorial-snippets && \ cd tutorial-snippets/Nextcloud

否则,使用以下 shell 代码创建一个名为“Nextcloud”的目录并下载其中的文件。

mkdir -p ~/Nextcloud && cd ~/Nextcloud for file in env.example docker-compose.yaml; do wget https://raw.githubusercontent.com/linux-console/tutorial-snippets/main/Nextcloud/${file} done

将 env.example 文件复制到 .env 。稍后您将编辑此文件的环境变量。保留原始文件只是为了备份,没有别的意思。

cp env.example .env

现在,让我回顾一下服务定义:

1. 数控数据库

NCDatabase 服务如下所示:

NCDatabase: image: "mariadb:10.5.9" volumes: - "NCMariaDB:/var/lib/mysql" environment: - MYSQL_ROOT_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD restart: "on-failure" networks: ["common"]

这是数据库服务,如前所述,它使用 mariadb:10.5.9 映像作为其蓝图。

对于持久存储,我使用名为 NCMariaDB 的卷,它安装在 /var/lib/mysql 上,MariaDB 在其中存储其数据。

环境变量是使用 .env 文件处理的,我稍后会讨论这一点。

我喜欢失败重新启动策略,但您可以自由选择除非停止或始终。您可能想阅读有关 Docker 中重启策略的更多信息。

common 网络在该服务和前端服务之间是通用的,它是为了确保这些容器之间可以进行通信。

环境变量

这是一个基于Docker的部署,你必然要设置一些环境变量。现在在您喜欢的文本编辑器中打开此 .env 文件并开始更改值,如下所示:

MYSQL_ROOT_PASSWORD 或 MYSQL_RANDOM_ROOT_PASSWORD:将 MYSQL_RANDOM_ROOT_PASSWORD 设置为 1 或为 MariaDB 设置强 root 密码。使用 openssl 生成随机密码。

MYSQL_DATABASE 和 MYSQL_USER:有一些默认设置,但您可以根据需要更改这些设置。分别将它们设置为您首选的数据库名称和用户名。

MYSQL_PASSWORD:有权访问主 MariaDB 数据库 (MYSQL_DATABASE) 的用户 (MYSQL_USER) 的密码。

MYSQL_HOST:这是数据库容器的服务名称。如果您不打算更改 Compose 文件中的服务名称,请保持原样。

2.NC前端

这是 Nextcloud 前端服务。这项服务与上一项服务一样简单。看一看:

NCFrontend: image: "nextcloud:21.0.0" volumes: - "NCData:/var/www/html" environment: - LETSENCRYPT_HOST - VIRTUAL_HOST - TRUSTED_PROXIES - OVERWRITEPROTOCOL - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD - MYSQL_HOST - SMTP_HOST - SMTP_PORT - SMTP_NAME - SMTP_PASSWORD - MAIL_FROM_ADDRESS - NEXTCLOUD_TRUSTED_DOMAINS - NEXTCLOUD_ADMIN_USER - NEXTCLOUD_ADMIN_PASSWORD depends_on: - "NCDatabase" networks: ["net", "common"]

正如我之前所说,使用的图像是 nextcloud:21.0.0,是撰写本文时的最新版本。

为了确保数据安全,并且不会在简单的容器重新启动的不幸事件中丢失数据,必须持久保存数据。 Nextcloud 将其数据/信息保存在 /var/www/html 中,因此使用名为 NCData 的卷使该位置持久化。

depends_on 数组是一个有趣的数组。它确保其中提到的值(即其中提到的服务)在当前服务启动之前首先部署。

在这里,我确保数据库在 Nextcloud 本身之前启动,以避免任何连接问题。

您可能仍会在日志中看到一些问题,因为成功的容器启动并不表明容器内的预期进程也已成功启动。他们可能需要更多时间。在我们的例子中,mysqld 需要更多的时间来启动,这就是为什么您可能会在日志中看到一些错误,直到最终成功建立连接。

有两个网络。第一个是 net,它也是反向代理部署的一部分。这是必要的,因为反向代理需要能够与代理服务(即 Nextcloud)进行通信。 common 网络是为了让 nextcloud 和数据库容器能够成功通信。

Docker Compose 在 Compose 文件中为其所有服务创建默认网络。但由于 NCFrontend 服务已经连接到网络,Docker Compose 将不再创建该默认网络,这就是为什么您必须创建一个像“common”这样的自定义网络才能进行通信。

环境变量

在您喜欢的文本编辑器中打开 .env 文件(与 MariaDB 使用的文件相同),然后开始更改值,如下所示:

LETSENCRYPT_HOST、VIRTUAL_HOST 和 NEXTCLOUD_TRUSTED_DOMAINS:将这些设置为您想要托管 Nextcloud 实例的域/子域。

TRUSTED_PROXIES:网络的子网,由反向代理和此前端共享。您可以使用以下命令获取子网(确保安装了jq)

docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet

OVERWRITEPROTOCOL:overwriteprotocol参数用于设置代理的协议。由于我们使用 HTTPS,因此将其设置为 HTTPS。

SMTP 配置是可选的。在本文中,我将使用 SendGrid 作为示例。请参阅您的 SMTP 服务器文档,了解以下环境变量的更合适的值。

SMTP_HOST 和 SMTP_PORT:SMTP 服务器地址及其侦听端口,对于 SendGrid,它是 smtp.sendgrid.net,对于自动 TLS,端口 587。

SMTP_NAME & SMTP_PASSWORD:用于身份验证的用户名和密码。对于 SendGrid,用户名的值非常一致。它是apikey。对于密码,它将是您的 API 密钥。

MAIL_FROM_ADDRESS:From SMTP 标头的值。将其设置为 [email  之类的内容。

NEXTCLOUD_ADMIN_USER 和 NEXTCLOUD_ADMIN_PASSWORD:您可以在部署阶段通过这些变量创建管理员用户,而不是第一次使用 Web UI 创建管理员用户。将这些设置为您的管理员用户的用户名和密码。如果您离开,系统会在您首次启动 Nextcloud 时提示您创建帐户。

我在此网络中定义了两个内部卷,用于 MariaDB 的 NCMariaDB 和用于 Nextcloud 的 NCData。保留这些内部还是外部取决于您。

许多人会说将这些保留在内部是有风险的,因为您很容易犯使用 docker-compose down -v 并删除卷和容器的错误。同时,对于外部卷,您可能会犯docker volume prune错误并删除所有数据。

决定哪一种对您来说更安全。如果您决定将它们设为外部,请打开 Compose 文件并将 volumes 定义更改为如下所示:-

volumes: NCMariaDB: external: true NCData: external: true

然后,创建卷:

for volume in NCMariaDB NCData; do docker volume create ${volume} done 网络

这里没有太多东西。您会注意到定义了两个网络。一个是为了前端和反向代理,另一个是为了前端和后端能够通信。

数据库容器和 nextcloud 前端有一个名为“common”的公共网络,这是为了使这两个容器能够相互通信。您可以将其设置为内部,这将限制数据库容器访问公共互联网,但我不确定您可以从中获得什么优势。

不过,如果你想这样做,它应该看起来像这样:

networks: net: external: true common: internal: true 最后,部署Nextcloud

没什么可做的了。只需运行以下命令

docker-compose up -d

将提取必要的图像,然后进行部署。

部署后,您的服务器上应该总共运行四个容器。

debdut@localhost:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1dce1c7909fe jrcs/letsencrypt-nginx-proxy-companion:latest "/bin/bash /app/entr…" 7 hours ago Up 7 hours reverse_proxy_LetsencryptCompanion_1 d29719999132 jwilder/nginx-proxy:latest "/app/docker-entrypo…" 7 hours ago Up 7 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp reverse_proxy_NginxProxy_1 cd719cb2a677 nextcloud:21.0.0 "/entrypoint.sh apac…" 7 hours ago Up 7 hours 80/tcp nextcloud_NCFrontend_1 60dff2062aa5 mariadb:10.5.9 "docker-entrypoint.s…" 7 hours ago Up 7 hours 3306/tcp nextcloud_NCDatabase_1

如果之前有容器运行,您可能还会运行更多容器。底线是这个 Nextcloud 部署由四个容器组成:nginx 容器、letsencrypt 配套容器、mariadb 容器,最后是实际的 nextcloud 容器。

部署后

在结束之前,我想提一下部署后您可能想知道的一件事情。

首先打开浏览器并转到托管此 Nextcloud 实例的域 (VIRTUAL_HOST)。如果您没有使用撰写文件设置管理员用户,您应该会看到与此类似的屏幕

由于数据库环境变量是通过通用 .env 文件共享的,因此您不会看到更常见的 Web 安装 UI,该 UI 会要求提供数据库信息(例如主机名、端口、数据库用户名密码)。

那里也可以看到类似的复选框。我建议您取消选中此框,然后从应用程序列表中安装您稍后需要的应用程序。

有关更多部署后技巧,请阅读我的同事 Avimanyu 撰写的这篇精彩文章:

就是这样。我希望这个详细的教程可以帮助您使用 Docker 安装 Nextcloud 服务器。如果您有疑问或建议,请在评论部分告诉我,我将很乐意为您提供帮助。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有